﻿using Facebook;
using FlyingCircusWebIS.Models.Services.Utilidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FlyingCircusWebIS.Models
{
    public class MidiaSocial
    {
        // Email
        private string nomeApareceEmail;
        private string enderecoEmail;
        private string hostEmail;
        private string portaEmail;
        private string senhaEmail;
        private string conexaoSSLEmail;

        // Indica a mensagem que será enviada para o cliente ativar o seu cadastro
        private string mensagemAtivacaoCadastro;
        private string assuntoMensagemAtivacaoCadastro;

        // Indica a mensagem que será enviada para o e-mail do cliente no ato do cancelamento
        private string assuntoCancelamentoReserva;
        private string mensagemCancelamentoReserva;

        // Indica a mensagem que será enviada para o email do cliente ao confirmar uma reserva
        private string assuntoConfirmacaoReserva;
        private string mensagemConfirmacaoReserva;

        // Facebook
        private string facebookAppId;
        private string facebookAppSecret;
        private string facebookAccessToken;
        private string facebookPostUrl;


        public void EnviarEmailDeAtivacaoDeCadastro(string emailCliente, string nomeCliente)
        {

            // Lógica para geração do link de ativação do cadastro
            string urlAtivacao = "http://localhost:6992/pessoa/ativarcad?cod=";
            string parametroLinkGeracaoPedaco =
                "veAihMarot";

            char[] arrayEmail = emailCliente.ToCharArray();
            Array.Reverse(arrayEmail);
            
            string parametroLinkGeracaoCompleto = parametroLinkGeracaoPedaco + new String(arrayEmail);

            urlAtivacao += parametroLinkGeracaoCompleto;

            MensagemAtivacaoCadastro = MensagemAtivacaoCadastro.Replace("$$_LINK", urlAtivacao);
            MensagemAtivacaoCadastro = mensagemAtivacaoCadastro.Replace("$$_CLIENTE", nomeCliente);

            // Envia o email de fato
            GerenciadorEmail.EnviarEmail(HostEmail, PortaEmail, conexaoSSLEmail.Equals("S"),
                                        EnderecoEmail, SenhaEmail, NomeApareceEmail,
                                        emailCliente, AssuntoAtivacaoCadastro, 
                                        MensagemAtivacaoCadastro);
        }

        public void EnviarEmailDeCancelamentoReserva(string emailCliente, string nomeCliente, 
                                                     string codReserva, DateTime dataPartida)
        {



            MensagemCancelamentoReserva = mensagemCancelamentoReserva.Replace("$$_CLIENTE", nomeCliente);
            MensagemCancelamentoReserva = mensagemCancelamentoReserva.Replace("$$_CODRESERVA", codReserva);
            MensagemCancelamentoReserva = mensagemCancelamentoReserva.Replace("$$_DTPARTIDA", dataPartida.ToString());


            GerenciadorEmail.EnviarEmail(HostEmail, PortaEmail, conexaoSSLEmail.Equals("S"),
                                        EnderecoEmail, SenhaEmail, NomeApareceEmail,
                                        emailCliente, AssuntoCancelamentoReserva,
                                        MensagemCancelamentoReserva);
        }

        public void EnviarEmailConfirmandoReserva(string emailCliente, string nomeCliente, string assento, Voo voo, string tempoVoo, string formaPagamento, 
                                                    string codCupom, string valorTotal)
                                                    //string cidadePartida, string ufPartida, string aeroportoPartida, DateTime dataPartida,
                                                    //string cidadeChegada, string ufChegada, string aeroportoChegada, DateTime dataChegada,
                                                    //string duracao, string formaPagamento, string codCupom, string valorVoo, string desontoVooPromoc,
                                                    //)
        {
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_CLIENTE", nomeCliente);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_ASSENTO", assento);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_NOMEVOO", voo.NomeVoo);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_AEROPARTIDA", voo.AeroportoPartida.NomeAeroporto);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_CIDADEPARTIDA", voo.AeroportoPartida.Cidade.NomeCidade);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_UFPARTIDA", voo.AeroportoPartida.Cidade.UF);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_AEROCHEGADA", voo.AeroportoChegada.NomeAeroporto);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_CIDADECHEGADA", voo.AeroportoChegada.Cidade.NomeCidade);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_UFCHEGADA", voo.AeroportoChegada.Cidade.UF);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_DATAP", voo.DataPartida.Date.ToShortDateString());
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_HORAP", voo.DataPartida.Hour.ToString("00"));
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_MINP", voo.DataPartida.Minute.ToString("00"));
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_DATAC", voo.DataChegada.Date.ToShortDateString());
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_HORAC", voo.DataChegada.Hour.ToString("00"));
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_MINC", voo.DataPartida.Minute.ToString("00"));
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_DURACAO", tempoVoo);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_ASSENTO", assento);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_FPAGAMENTO", formaPagamento);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_CODCUPOM", codCupom);
            MensagemConfirmacaoReserva = mensagemConfirmacaoReserva.Replace("$$_VALORTOTAL", valorTotal);



            GerenciadorEmail.EnviarEmail(HostEmail, PortaEmail, conexaoSSLEmail.Equals("S"),
                                        EnderecoEmail, SenhaEmail, NomeApareceEmail,
                                        emailCliente, AssuntoMensagemConfirmacaoReserva,
                                        MensagemConfirmacaoReserva);
        }

        public void PostarFacebook(string msg)
        {
            FacebookClient fb = new FacebookClient(FacebookAccessToken);
            fb.AppId = FacebookAppId;
            fb.AppSecret = FacebookAppSecret;
            Dictionary<string, object> postargs = new Dictionary<string, object>();
            postargs["message"] = msg;
            fb.Post("/1430334213852904/feed", postargs);
        }


        public string NomeApareceEmail
        {
            get { return nomeApareceEmail; }
            set
            {
                if (value != null && value.Length <= 50)
                    nomeApareceEmail = value;
            }
        }

        public string EnderecoEmail
        {
            get { return enderecoEmail; }
            set
            {
                if (value != null && value.Length <= 50)
                    enderecoEmail = value;
            }
        }

        public string HostEmail
        {
            get { return hostEmail; }
            set
            {
                if (value != null && value.Length <= 70)
                    hostEmail = value;
            }
        }

        public string SenhaEmail
        {
            get { return senhaEmail; }
            set
            {
                if (value != null && value.Length <= 300)
                    senhaEmail = value;
            }
        }

        public string ConexaoSSLEmail
        {
            get { return conexaoSSLEmail; }
            set
            {
                if (value != null && value.Length == 1)
                {
                    string vFlagUpper = value.ToUpper();
                    if (vFlagUpper.Equals("S") || vFlagUpper.Equals("N"))
                        conexaoSSLEmail = vFlagUpper;
                }
            }
        }

        public string FacebookAppId
        {
            get { return facebookAppId; }
            set
            {
                if (value != null && value.Length <= 200)
                    facebookAppId = value;
            }
        }


        public string FacebookAppSecret
        {
            get { return facebookAppSecret; }
            set
            {
                if (value != null && value.Length <= 250)
                    facebookAppSecret = value;
            }
        }

        public string FacebookAccessToken
        {
            get { return facebookAccessToken; }
            set 
            {
                if (value != null && value.Length <= 500)
                    facebookAccessToken = value;
            }
        }

        public string FacebookPostUrl
        {
            get { return facebookPostUrl; }
            set
            {
                if (value != null && value.Length <= 200)
                    facebookPostUrl = value;
            }
        }

        public string MensagemAtivacaoCadastro
        {
            get { return mensagemAtivacaoCadastro; }
            set
            {
                if (value != null && value.Length <= 2000)
                    mensagemAtivacaoCadastro = value;
            }
        }

        public string AssuntoAtivacaoCadastro
        {
            get { return assuntoMensagemAtivacaoCadastro; }
            set
            {
                if (value != null && value.Length <= 100)
                    assuntoMensagemAtivacaoCadastro = value;
            }
        }

        public string MensagemCancelamentoReserva
        {
            get { return mensagemCancelamentoReserva; }
            set
            {
                if (value != null && value.Length <= 2000)
                    mensagemCancelamentoReserva = value;
            }
        }

        public string AssuntoCancelamentoReserva
        {
            get { return assuntoCancelamentoReserva; }
            set
            {
                if (value != null && value.Length <= 100)
                    assuntoCancelamentoReserva = value;
            }
        }

        public string AssuntoMensagemConfirmacaoReserva
        {
            get { return assuntoConfirmacaoReserva; }
            set
            {
                if (value != null && value.Length <= 100)
                    assuntoConfirmacaoReserva = value;
            }
        }

        public string MensagemConfirmacaoReserva
        {
            get { return mensagemConfirmacaoReserva; }
            set
            {
                if (value != null && value.Length <= 10000)
                    mensagemConfirmacaoReserva = value;
            }
        }
        public string PortaEmail
        {
            get { return portaEmail; }
            set
            {
                if (value != null && value.Length <= 6)
                    portaEmail = value;
            }
        }
    }
}